using System;
using System.Collections.Generic;
using NHibernate.Criterion;
using ProyectoSelva.Const;
using ProyectoSelva.Entities;

namespace ProyectoSelva.Daos
{
    public class TrabajadorDAO : BaseDAO<Trabajador>
    {
        
        public Trabajador Actualizar(Trabajador trabajador)
        {
            using (var session=CreateSessionFactory().OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    session.SaveOrUpdate(trabajador);
                    transaction.Commit();
                }
            }
            return trabajador;
        }

        public IList<Trabajador> Buscar(Trabajador trabajador)
        {
            IList<Trabajador> lista;
            using (var session = CreateSessionFactory().OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    var criteria = session.CreateCriteria<Trabajador>();
                    if (!String.IsNullOrEmpty(trabajador.NumeroDocumento))
                    {
                        criteria.Add(Restrictions.Like("NumeroDocumento", trabajador.NumeroDocumento + "%"));
                    }
                    if (!String.IsNullOrEmpty(trabajador.Nombres))
                    {
                        criteria.Add(Restrictions.Like("Nombres", trabajador.Nombres + "%"));
                    }
                    if (!String.IsNullOrEmpty(trabajador.Apellidos))
                    {
                        criteria.Add(Restrictions.Like("Apellidos", trabajador.Apellidos + "%"));
                    }
                    criteria.Add(Restrictions.Eq("Estado", Estado.Activo));
                    lista = criteria.List<Trabajador>();
                    transaction.Commit();
                }
            }
            return lista;
        }

        public void Eliminar(Trabajador trabajador)
        {
            using (var session = CreateSessionFactory().OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    trabajador.Estado = Estado.Inactivo;
                    session.Save(trabajador);
                    transaction.Commit();
                }
            }
        }

    }
}